#ifndef ENGINE_X11WINDOW_IMPLEMENTATION_H__
#define ENGINE_X11WINDOW_IMPLEMENTATION_H__

#include "WindowInterface.h"

#include <GL/glx.h>
//#include <X11/extensions/xf86vmode.h>
#include <X11/keysym.h>
#include <map>

/**
 * Implementação específica de janela para X11.
 *
 * @see JanelaFactory
 */
class X11Window : public WindowInterface
{
public:


	/**
	 * Construtor.
	 */
	X11Window(const WindowSettings& settings );

	/**
	 * Destrutor: é importante que seja virtual, pois essa classe é abstrata
	 */
	virtual ~X11Window(void);


	/**
	 * Inicia o laço de renderização e de tratamento de eventos dessa janela
	 */
	virtual void startRendering(void);




	/**
	 * Troca os buffers, forçando o OpenGL a exibir o resultado do quadro.
	 */
	virtual void swapBuffers(void);

protected:

	bool handleX11Events(void);

	/// Ponteiro para o display do X11 usado pela janela
	::Display* dpy;
	/// Representa a janela do X11
	::Window win;
	/// Contexto do OpenGL. Necessário para aplicações multi-janela
	::GLXContext ctx;
	/// Atributos da janela no X11. Necessário por estarmos usando OpenGL
	::XSetWindowAttributes attr;
	/// Identificador da tela
	int screen;
	/// Indica se estamos no laço principal
	bool running;

	typedef std::map<int, WindowInterface::KeyCode> ReverseKeyMap;
	ReverseKeyMap reverseKeyMap;

};


#endif /* ENGINE_X11WINDOW_IMPLEMENTATION_H__ */
